import Vue from 'vue'
import App from './App.vue'
import router from './router'
// import './plugins/element.js'
// 公共基础类
import './assets/css/common.css'
// 字体图标类
import './assets/fonts/iconfont.css'
// 导入axios
import axios from 'axios'
// 导入树形表格插件
import TableTree from 'vue-table-with-tree-grid'
// 导入富文本编辑器
import VueQuillEditor from 'vue-quill-editor'
// 导入富文本编辑器样式表
// import 'quill/dist/quill.core.css' // import styles
// import 'quill/dist/quill.snow.css' // for snow theme
// import 'quill/dist/quill.bubble.css' // for bubble theme
// 导入进度条的包和样式
import NProgress from 'nprogress'
// import 'nprogress/nprogress.css'
// 解决终端提示鼠标事件的警告
import 'default-passive-events'
// 全局注册富文本编辑器
Vue.use(VueQuillEditor);

// 注册树形表格组件
Vue.component('tree-table', TableTree);

Vue.config.productionTip = true;
// 配置axios
axios.defaults.baseURL = 'http://127.0.0.1:8888/api/private/v1/';
// 添加请求拦截器
axios.interceptors.request.use(config => {
  // 添加进度条效果
  NProgress.start();
  // 在发送请求之前做些什么
  config.headers.Authorization = window.sessionStorage.getItem('token');
  return config;
  // 对请求错误做些什么
}, error => Promise.reject(error));

// 添加响应拦截器
axios.interceptors.response.use(res => {
  console.log(res.data);
  if (res.data.meta.msg === '无效token') {
    Vue.prototype.$message.error('无效的token');
    router.push('/login');
    window.sessionStorage.removeItem('token');
    // console.log(router);
  }
  if (res.data.meta.status === 401) {
    Vue.prototype.$message.error('权限验证失败！');
  }
  // 隐藏进度条效果
  NProgress.done();
  return res.data;
}, error => Promise.reject(error));
// 把axios 挂载到vue的原型上，供全局使用
Vue.prototype.$axios = axios;

// 定义时间过滤器
Vue.filter('format', (date, format) => {
  if (typeof date === 'string') {
    var mts = date.match(/(\/Date\((\d+)\)\/)/);
    if (mts && mts.length >= 3) {
      date = parseInt(mts[2]);
    }
  }
  date = new Date(date);
  if (!date || date.toUTCString() === 'Invalid Date') {
    return '';
  }
  var map = {
    M: date.getMonth() + 1, // 月份
    d: date.getDate(), // 日
    h: date.getHours(), // 小时
    m: date.getMinutes(), // 分
    s: date.getSeconds(), // 秒
    q: Math.floor((date.getMonth() + 3) / 3), // 季度
    S: date.getMilliseconds() // 毫秒
  };

  format = format.replace(/([yMdhmsqS])+/g, function (all, t) {
    var v = map[t];
    if (v !== undefined) {
      if (all.length > 1) {
        v = '0' + v;
        v = v.substr(v.length - 2);
      }
      return v;
    } else if (t === 'y') {
      return (date.getFullYear() + '').substr(4 - all.length);
    }
    return all;
  });
  return format;
});

new Vue({
  router,
  render: h => h(App)
}).$mount('#app');
